package com.center.growcenterserver.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.center.growcenterserver.common.R;
import com.center.growcenterserver.mapper.HonorMapper;
import com.center.growcenterserver.model.domain.Honor;
import com.center.growcenterserver.model.request.HonorRequest;
import com.center.growcenterserver.service.HonorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Slf4j
@Service
public class HonorServiceImpl extends ServiceImpl<HonorMapper, Honor> implements HonorService {

    @Autowired
    private HonorMapper honorMapper;
    @Override
    public R getAllHonors() {
        return R.success("查询成功", honorMapper.getAllHonors());
    }

    @Override
    public R getAllHonors(IPage<Honor> page) {
        IPage<Honor> honors = this.page(page);
        if (honors.getRecords().isEmpty()) {
            return R.error("未查询到任何事件");
        }
        return R.success("查询成功", honors);
    }

    @Override
    public R getHonorById(String id) {
        Honor honor = this.getById(id);
        if (honor == null) {
            return R.error("未找到指定ID的事件");
        }
        return R.success("查询成功", honor);
    }

    @Override
    public R getHonorByStuId(String stuid) {
        // 参数校验
        if (StringUtils.isBlank(stuid)) {
            return R.error("学生ID不能为空");
        }

        // 构建查询条件（根据学生ID查询）
        QueryWrapper<Honor> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("student_id", stuid);

        // 查询该学生的所有荣誉记录（使用selectList方法）
        List<Honor> honorList = this.list(queryWrapper);

        // 判断结果并返回
        if (CollectionUtils.isEmpty(honorList)) {
            return R.error("未找到该学生的荣誉记录");
        }

        return R.success("查询成功", honorList);
    }

    @Override
    public int addHonor(HonorRequest honorRequest) {
        Honor honor = new Honor();

        // 将请求对象转换为实体对象，但忽略 id 字段
        BeanUtils.copyProperties(honorRequest, honor); // 忽略 id 字段的复制

        // 保存到数据库，id 会由数据库自动生成
        return honorMapper.insert(honor);
    }

    @Override
    public R updateHonor(HonorRequest honorRequest) {
        Honor honor = new Honor();
        BeanUtils.copyProperties(honorRequest, honor); // 将请求对象转换为实体对象
        boolean result = this.updateById(honor); // 更新事件信息
        if (result) {
            return R.success("事件更新成功");
        } else {
            return R.error("事件更新失败");
        }
    }

    @Override
    @Transactional // 开启事务
    public R deleteHonorById(Long id) {
        boolean result = this.removeById(id); // 根据ID删除事件
        if (result) {
            return R.success("事件删除成功");
        } else {
            return R.error("事件删除失败");
        }
    }

    @Override
    public R deleteHonorsByIds(Long[] ids) {
        boolean result = this.removeByIds(List.of(ids)); // 批量删除事件
        if (result) {
            return R.success("事件批量删除成功");
        } else {
            return R.error("事件批量删除失败");
        }
    }


}
